#写一个三乐购物系统，功能使用函数封装
#1、欢迎界面
#   1、登录
#      输入用户名和密码
#      和系统里保存的用户信息比较，判断用户和密码是否合法
#      登录失败，返回上一级
#      登录成功：
#       1、查看商品
#       2、加入购物车
#       3、结算购物车
#       4、返回上一级
#   2、注册
#      用户名、用户密码、用户存入金额
#      用户信息固化
#   3、退出



# 登录函数
# 用户登录成功返回True，登录失败返回False
def login():
    if username in user and user[username]["passwd"] == passwd:
        return True
    else:
        print("输入错误，登录失败！")
        return False

# 注册函数
# 传入用户名、密码、预算信息
def register():
    if username in user:
        print("用户名已存在！")
    else:
        # 添加新的用户信息
        user[username] = {"passwd": passwd, "budget": budget}
        # dict --> str
        user_str = json.dumps(user)
        # 打开文本文件，将注册的用户信息写入文件
        fp = open("userinfo.txt", "w")
        fp.write(user_str)
        # 用完后关闭文件，不然会一直占用内存资源
        fp.close()
        print(f"{username}用户注册成功！")

# 查看商品信息
def check_store():
    print("以下是商品信息：")
    for i in store_list:
        print(f"商品编号:{i},商品:{store_list[i]['name']},单价:{store_list[i]['price']}")

# 商品加入购物车
def add_Cart():
    cart[goodsid] = cart.get(goodsid, 0) + num_store
    print(f"加购{num_store}个{store_list[goodsid]['name']}成功")


# 查看购物车
def check_Cart():
    if cart:
        print("以下为购物车中的的商品信息：")
        for i in cart:
            print(f"商品编号:{i},商品:{store_list[i]['name']},单价:{store_list[i]['price']}")
    else:
        # 购物车为空时给出提醒
        print("购物车为空")


# 结算购物车
def pay_Cart():
    # pay记录用户需要支付的金额
    for i in cart:
       pay = cart[i] * store_list[i]['price']
    print(f"你一共需要支付{pay}元")
    if pay <= float(user[username]['budget']):
        # 注意运算时的类型
        # money变量记录结算后的预算信息
        money = float(user[username]['budget'])
        money = money - pay
        user[username]['budget'] = str(money)
        user_str = json.dumps(user)
        # 将购买商品后的预算信息写入文件中
        fp = open("userinfo.txt", "w")
        fp.write(user_str)
        fp.close()
        print(f"购买成功，你的余额为{user[username]['budget']}")
        # 备份
        cart2.update(cart.copy())
        # 清除购物车中的商品信息
        cart.clear()
    else:
        print("余额不足，将自动清空购物车中商品，请重新加购商品")
        cart.clear()


# 退出系统
def exitSystem():
    print("谢谢惠顾！欢迎下次光临！")
    if cart2:
        for i in cart2:
            print("以下是你本次购买的商品：")
            print(f"购买{store_list[i]['name']}:{cart2[i] * store_list[i]['price']}元")
    else:
        print("本次购物，你未购买商品")
    print(f"你目前的余额为{user[username]['budget']}")


# 主程序
import json
# 保存用户信息，格式为{用户名:{"passwd":密码, "budget":预算}}
user = {}
# 保存购物车中的商品信息，格式为{商品编号, 商品数量}
cart = {}
# cart2在进行清空购物车时，对cart里面的内容进行备份
cart2 = {}
# 商品信息
store_list = {'001': {'name': '面包', 'price': 4.3},'002': {'name': '矿泉水', 'price': 2},'003': {'name': '糖果', 'price': 6},'004': {'name': '文具', 'price': 2}, '005': {'name': '书籍', 'price': 10}}
print("欢迎进入三乐购物系统!")
while 1:
    print("1、登录")
    print("2、注册")
    print("3、退出")
    option1 = input("请输入你的选择：")
    if option1 == "1":
        fp = open("userinfo.txt")
        user_str = fp.read()
        user = json.loads(user_str)
        username = input("请输入用户名：")
        passwd = input("请输入密码：")
        if login():
            print(f"{username}用户登录成功!")
            print(f"欢迎光临!你的余额为{user[username]['budget']}")
            while 1:
                print("1、查看商品信息")
                print("2、将商品加入购物车")
                print("3、结算购物车")
                print("4、退出购物系统")
                option2 = input("请输入你的选择：")
                if option2 == "1":
                    check_store()
                elif option2 == "2":
                    goodsid = input("请输入你想购买的商品编号(001-005)：")
                    if goodsid in store_list:
                        num_store = input("请输入你想购买的数量：")
                        if num_store.isdigit():
                            num_store = int(num_store)
                            add_Cart()
                        else:
                            print("请输入正确的商品数量")
                    else:
                        print("对不起，该商品不存在")
                elif option2 == "3":
                    pay_Cart()
                elif option2== "4":
                    exitSystem()
                    break
                else:
                    print("输入错误，请重新输入！")
        # else:
        #     print("用户不存在，请重新选择！")
    elif option1 == "2":
        # 读取文件中的信息赋值给user
        fp = open("userinfo.txt")
        user_str = fp.read()
        fp.close()
        # dict --> str
        user = json.loads(user_str)
        username = input("请输入用户名：")
        passwd = input("请输入密码：")
        budget = input("请输入你的首次充值数额：")
        register()
    elif option1 == "3":
        break
    else:
        print("输入错误，请重新输入！")